1. Field of the Invention
The present invention relates to code obfuscation and more specifically to obfuscating portions of machine-executable code by replacing them with functionally equivalent variations.
2. Introduction
Software publishers often attempt to restrict access to portions of compiled software executables to thwart would-be reverse engineering while still allowing the executables to function properly. Reverse engineering is the practice of dissecting and/or analyzing software to understand how it works. On certain systems, reverse engineering can retrieve information stored within software such as information related to cryptographic keys or copy protection schemes. Reverse engineers can even tamper with the software itself.
Would-be attackers typically have access to the executable code for software and can try to reverse engineer it at their leisure. Those of skill in the art are aware of many approaches to harden a piece of software to such reverse engineering attempts. However, problems with these approaches include rapid growth of source code and increased computational requirements. Such source code can be very difficult to maintain. Further, if an attacker compromises the hardening scheme, the software is difficult to rewrite.
Suppose a software publisher includes proprietary keys, algorithms, and copy protection related information in software for sale. Reverse engineers can quickly obtain legitimate or illegitimate copies of the software and commence testing the software for weaknesses and thereby extract proprietary keys and algorithms. What is needed in the art is an improved way to make software more resistant to reverse engineering.